Modern graphics processors process input primitive (e.g. triangle) information in floating point format and generate corresponding output pixel information, where the accumulated pixel information represents a scene. The pixel information provided by the graphics processor is typically stored in a frame buffer, or other suitable memory, for subsequent transmission and presentation on a suitable display device. The pixel information is typically stored in the frame buffer in fixed point format. The display presents the pixel information in fixed point analog format, referred to as gamma space. In operation, the stored pixel (e.g. digital) information is passed through a digital-to-analog converter (DAC), before the pixel information is presented on the display.
Modern displays exhibit non-linear appearance characteristics which may be represented as follows:b=Vgammawhere b represents, for example, a corresponding appearance (e.g. brightness) value of the display output, V represents the pixel value provided by the DAC and gamma represents a weighing factor associated with the pixel value. Thus, the appearance (e.g., brightness), for example, of a pixel to be presented on the display does not exhibit a one-to-one linear relationship with the signal (e.g. voltage) provided by the DAC. This results in inferior image quality, for example, as the actual pixel appearance (e.g. brightness) is typically less than expected based on the gamma value. For example, an input brightness value of 0.5 does not result in a displayed pixel brightness of ½max; rather, the resulting displayed brightness of the corresponding pixel is typically about ¼max.
One solution is to use an inverse gamma table located between the frame buffer and the digital-to-analog converter of a display controller. The inverse gamma table may be, for example, a look-up table that includes conversion values that effectively correct for the non-linear characteristics of the display device. However, a disadvantage of such a system may be that the frame buffer typically is only 8-bits per component per pixel and so for values near black there may be very discrete steps that are plainly visible on the monitor since the monitor is typically more sensitive to low light levels that to high light levels. In such systems gamma correction is performed after the pixel information is stored in the frame buffer.